home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 23
/
Aminet 23 (1998)(GTI - Schatztruhe)[!][Feb 1998].iso
/
Aminet
/
disk
/
misc
/
TransADF.lha
/
Source
/
read_disk.c
< prev
next >
Wrap
C/C++ Source or Header
|
1997-12-03
|
3KB
|
94 lines
#include <exec/types.h>
#include <exec/memory.h>
#include <dos/dos.h>
#include <clib/exec_protos.h>
#include <clib/dos_protos.h>
#include "read_disk.h"
#include "main.h"
#include "td.h"
#include "util.h"
#include "errors.h"
#define RD_TBTRACKS 1 /* Tracks in rd_TrackBuf */
#define RD_TBSIZE (RD_TBTRACKS * TRACK_SIZE) /* Bytes in rd_TrackBuf */
UBYTE *rd_TrackBuf; /* Our input buffer - reads from disk. */
/*
** Read a disk into a file.
** Expects all fields of adfPkt to be set.
*/
void readDisk (struct ADF_Packet *adfPkt)
{
BYTE TDError;
LONG DOSError, RWSize;
int i;
/* Output info header */
FPrintf (StdErr, "Reading from TrackDisk Unit %ld (DF%ld:) to %s.\n",
adfPkt->diskUnit,
adfPkt->diskUnit,
adfPkt->ADFileName);
FPrintf (StdErr, "Starting at track %ld, Ending at track %ld.\n",
(adfPkt->startTrack>>1),
(adfPkt->endTrack>>1));
/* Allocate track buffer */
rd_TrackBuf = (UBYTE *) AllocVec (RD_TBSIZE, MEMF_CLEAR);
if (!rd_TrackBuf)
{
/* Out of memory! */
FPrintf (StdErr, "%s: Out of memory.\n", ProgName);
cleanExit (RETURN_FAIL, ERROR_NO_FREE_STORE);
}
/* Start reading */
for (i = adfPkt->startTrack; i <= adfPkt->endTrack; i++)
{
/* Check for Control-C break */
if (CTRL_C)
{
FPutC (StdOut, '\n');
FPrintf (StdErr, "%s - %s\n", breakText, ProgName);
cleanExit (RETURN_WARN, NULL);
}
/* Update progress information */
FPuts (StdOut, "\rReading ");
FPUTS_TS (i, StdOut);
Flush (StdOut);
/* Fill the buffer from disk */
TDError = readTrack (rd_TrackBuf, RD_TBTRACKS, i, adfPkt->diskReq);
if (TDError)
{
FPutC (StdOut, '\n');
FPrintf (StdErr, "%s: Error reading from DF%ld: - ", ProgName,
adfPkt->diskUnit);
reportTDError (TDError);
cleanExit (RETURN_ERROR, NULL);
}
/* Write the buffer to the output file */
RWSize = Write (adfPkt->ADFile, rd_TrackBuf, RD_TBSIZE);
if (RWSize != RD_TBSIZE)
{
DOSError = IoErr();
FPutC (StdOut, '\n');
FPrintf (StdErr, "%s: Error writing to %s - ",ProgName,
adfPkt->ADFileName);
reportDOSError (DOSError);
cleanExit (RETURN_ERROR, DOSError);
}
}
/* Free buffer */
FreeVec (rd_TrackBuf); rd_TrackBuf = NULL;
}